const { app, Menu, BrowserWindow, Tray, shell, dialog } = require("electron");
const path = require("path");

let tray = null;
let mainWindow = null;
let favicon = path.join(__dirname, "favicon.ico");
let gotTheLock = app.requestSingleInstanceLock();

if (!gotTheLock) {
  app.quit();
} else {
  app.on("second-instance", () => {
    // 当运行第二个实例时,将会聚焦到 mainWindow 这个窗口
    if (mainWindow) {
      if (mainWindow.isMinimized()) mainWindow.restore();
      if (!mainWindow.isVisible()) {
        mainWindow.show();
        mainWindow.setSkipTaskbar(false);
      }
      mainWindow.focus();
    }
  });

  // 创建 mainWindow, 加载应用的其余部分, etc...
  app.on("ready", () => {
    function createWindow() {
      mainWindow = new BrowserWindow({
        icon: favicon,
        show: false,
        webPreferences: { webSecurity: false },
      });

      Menu.setApplicationMenu(null);
      mainWindow.loadURL("https://www.popkart.club/");
      mainWindow.maximize();
      mainWindow.show();

      //创建系统通知区菜单
      tray = new Tray(favicon);
      const contextMenu = Menu.buildFromTemplate([
        {
          label: `官网`,
          click: () => {
            shell.openExternal(
              "https://popkart.tiancity.com/homepage/v2/index.html"
            );
          },
        },
        {
          label: `切换`,
          click: () => {
            if (mainWindow.isVisible()) {
              mainWindow.hide();
              mainWindow.setSkipTaskbar(true);
            } else {
              mainWindow.show();
              mainWindow.setSkipTaskbar(false);
            }
          },
        },
        {
          label: "退出",
          click: () => {
            mainWindow.destroy();
          },
        },
      ]);

      tray.setToolTip("跑跑数据库");
      tray.setContextMenu(contextMenu);

      tray.on("click", () => {
        mainWindow.show();
        mainWindow.setSkipTaskbar(false);
      });

      mainWindow.on("close", (event) => {
        event.preventDefault();
        dialog
          .showMessageBox({
            type: "info",
            title: "跑跑数据库",
            message: "是否最小化至系统托盘？",
            buttons: ["是", "否"],
            cancelId: 2,
          })
          .then((index) => {
            if (index.response == 0) {
              mainWindow.hide();
              mainWindow.setSkipTaskbar(true);
            } else {
              mainWindow.destroy();
            }
          });
      });
    }

    // 当 Electron 完成时将调用此方法
    // 初始化并准备创建浏览器窗口
    // 有些API仅在此事件发生后才能使用
    app.whenReady().then(createWindow);

    // 关闭所有窗口后退出
    app.on("window-all-closed", function () {
      // 在macOS上，应用程序及其菜单栏很常见
      // 保持活动状态，直到用户使用Cmd + Q明确退出为止
      if (process.platform !== "darwin") app.quit();
    });

    app.on("activate", function () {
      // 在macOS上，通常会在应用程序重新创建窗口时
      // 单击停靠图标，没有其他窗口打开
      if (BrowserWindow.getAllWindows().length === 0) createWindow();
    });
  });
}
